home *** CD-ROM | disk | FTP | other *** search
- /*
- * (c) 1984, Stanford Univ. SUMEX project.
- * May be used but not sold without permission.
- *
- * (c) 1986, Kinetics, Inc.
- * May be used but not sold without permission.
- *
- * $Header: inet.h,v 4.1 88/11/01 19:49:53 sw0l Exp $
- */
-
- /*
- * Constants and structures defined by the internet system,
- * Per RFC 790, September 1981.
- */
-
- /*
- * Protocols
- */
- #define IPPROTO_ICMP 1 /* control message protocol */
- #define IPPROTO_GGP 2 /* gateway^2 (deprecated) */
- #define IPPROTO_TCP 6 /* tcp */
- #define IPPROTO_PUP 12 /* pup */
- #define IPPROTO_UDP 17 /* user datagram protocol */
- #define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
-
- #define IPPROTO_RAW 255 /* raw IP packet */
- #define IPPROTO_MAX 256
-
- /*
- * Port/socket numbers: network standard functions
- */
- #define IPPORT_ECHO 7
- #define IPPORT_DISCARD 9
- #define IPPORT_SYSTAT 11
- #define IPPORT_DAYTIME 13
- #define IPPORT_NETSTAT 15
- #define IPPORT_FTP 21
- #define IPPORT_TELNET 23
- #define IPPORT_SMTP 25
- #define IPPORT_TIMESERVER 37
- #define IPPORT_NAMESERVER 42
- #define IPPORT_WHOIS 43
- #define IPPORT_MTP 57
-
- /*
- * Port/socket numbers: host specific functions
- */
- #define IPPORT_TFTP 69
- #define IPPORT_RJE 77
- #define IPPORT_FINGER 79
- #define IPPORT_TTYLINK 87
- #define IPPORT_SUPDUP 95
-
- /*
- * UNIX TCP sockets
- */
- #define IPPORT_EXECSERVER 512
- #define IPPORT_LOGINSERVER 513
- #define IPPORT_CMDSERVER 514
- #define IPPORT_EFSSERVER 520
-
- /*
- * UNIX UDP sockets
- */
- #define IPPORT_BIFFUDP 512
- #define IPPORT_WHOSERVER 513
- #define IPPORT_ROUTESERVER 520 /* 520+1 also used */
-
- /*
- * Ports < IPPORT_RESERVED are reserved for
- * privileged processes (e.g. root).
- */
- #define IPPORT_RESERVED 1024
-
- /*
- * Link numbers
- */
- #define IMPLINK_IP 155
- #define IMPLINK_LOWEXPER 156
- #define IMPLINK_HIGHEXPER 158
-
-
- /*
- * Definitions of bits in internet address integers.
- */
- #define IN_CLASSA(i) ((((long)(i))&0x80000000)==0)
- #define IN_CLASSA_NET 0xff000000
- #define IN_CLASSA_NSHIFT 24
- #define IN_CLASSA_HOST 0x00ffffff
-
- #define IN_CLASSB(i) ((((long)(i))&0xc0000000)==0x80000000)
- #define IN_CLASSB_NET 0xffff0000
- #define IN_CLASSB_NSHIFT 16
- #define IN_CLASSB_HOST 0x0000ffff
-
- #define IN_CLASSC(i) ((((long)(i))&0xc0000000)==0xc0000000)
- #define IN_CLASSC_NET 0xffffff00
- #define IN_CLASSC_NSHIFT 8
- #define IN_CLASSC_HOST 0x000000ff
-
- #define INADDR_ANY 0x00000000
- #define INADDR_BROADCAST 0xFFFFFFFF
-
- /*
- * Definitions for internet protocol version 4.
- * Per RFC 791, September 1981.
- */
- #define IPVERSION 4
-
- /*
- * Structure of an internet header, naked of options.
- *
- * We declare ip_len and ip_off to be short, rather than u_short
- * pragmatically since otherwise unsigned comparisons can result
- * against negative integers quite easily, and fail in subtle ways.
- */
- struct ip {
- #ifdef lowendian
- u_char ip_hl:4, /* header length */
- ip_v:4; /* version */
- #else lowendian
- u_char ip_v:4, /* version */
- ip_hl:4; /* header length */
- #endif lowendian
- u_char ip_tos; /* type of service */
- short ip_len; /* total length */
- u_short ip_id; /* identification */
- short ip_off; /* fragment offset field */
- #define IP_DF 0x4000 /* dont fragment flag */
- #define IP_MF 0x2000 /* more fragments flag */
- u_char ip_ttl; /* time to live */
- u_char ip_p; /* protocol */
- u_short ip_sum; /* checksum */
- iaddr_t ip_src,ip_dst; /* source and dest address */
- };
-
- /*
- * Definitions for options.
- */
- #define IPOPT_COPIED(o) ((o)&0x80)
- #define IPOPT_CLASS(o) ((o)&0x60)
- #define IPOPT_NUMBER(o) ((o)&0x1f)
-
- #define IPOPT_CONTROL 0x00
- #define IPOPT_RESERVED1 0x20
- #define IPOPT_DEBMEAS 0x40
- #define IPOPT_RESERVED2 0x60
-
- #define IPOPT_EOL 0 /* end of option list */
- #define IPOPT_NOP 1 /* no operation */
-
- #define IPOPT_RR 7 /* record packet route */
- #define IPOPT_TS 68 /* timestamp */
- #define IPOPT_SECURITY 130 /* provide s,c,h,tcc */
- #define IPOPT_LSRR 131 /* loose source route */
- #define IPOPT_SATID 136 /* satnet id */
- #define IPOPT_SSRR 137 /* strict source route */
-
-
- /*
- * Internet implementation parameters.
- */
- #define MAXTTL 255 /* maximum time to live (seconds) */
- #define IPFRAGTTL 15 /* time to live for frag chains */
- #define IPTTLDEC 1 /* subtracted when forwarding */
-
-
- /*
- * Interface Control Message Protocol Definitions.
- * Per RFC 792, September 1981.
- */
-
- /*
- * Structure of an icmp header.
- */
- struct icmp {
- u_char icmp_type; /* type of message, see below */
- u_char icmp_code; /* type sub code */
- u_short icmp_cksum; /* ones complement cksum of struct */
- union {
- u_char ih_pptr; /* ICMP_PARAMPROB */
- iaddr_t ih_gwaddr; /* ICMP_REDIRECT */
- struct ih_idseq {
- n_short icd_id;
- n_short icd_seq;
- } ih_idseq;
- int ih_void;
- } icmp_hun;
- #define icmp_pptr icmp_hun.ih_pptr
- #define icmp_gwaddr icmp_hun.ih_gwaddr
- #define icmp_id icmp_hun.ih_idseq.icd_id
- #define icmp_seq icmp_hun.ih_idseq.icd_seq
- #define icmp_void icmp_hun.ih_void
- union {
- struct id_ts {
- n_time its_otime;
- n_time its_rtime;
- n_time its_ttime;
- } id_ts;
- struct id_ip {
- struct ip idi_ip;
- /* options and then 64 bits of data */
- } id_ip;
- } icmp_dun;
- #define icmp_otime icmp_dun.id_ts.its_otime
- #define icmp_rtime icmp_dun.id_ts.its_rtime
- #define icmp_ttime icmp_dun.id_ts.its_ttime
- #define icmp_ip icmp_dun.id_ip.idi_ip
- };
-
- /*
- * Lower bounds on packet lengths for various types.
- * For the error advice packets must first insure that the
- * packet is large enought to contain the returned ip header.
- * Only then can we do the check to see if 64 bits of packet
- * data have been returned, since we need to check the returned
- * ip header length.
- */
- #define ICMP_MINLEN 8 /* abs minimum */
- #define ICMP_TSLEN (8 + 3 * sizeof (n_time)) /* timestamp */
- #define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */
- #define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8)
- /* N.B.: must separately check that ip_hl >= 5 */
-
- /*
- * Definition of type and code field values.
- */
- #define ICMP_ECHOREPLY 0 /* echo reply */
- #define ICMP_UNREACH 3 /* dest unreachable, codes: */
- #define ICMP_UNREACH_NET 0 /* bad net */
- #define ICMP_UNREACH_HOST 1 /* bad host */
- #define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */
- #define ICMP_UNREACH_PORT 3 /* bad port */
- #define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */
- #define ICMP_UNREACH_SRCFAIL 5 /* src route failed */
- #define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */
- #define ICMP_REDIRECT 5 /* shorter route, codes: */
- #define ICMP_REDIRECT_NET 0 /* for network */
- #define ICMP_REDIRECT_HOST 1 /* for host */
- #define ICMP_REDIR_TOSNET 2 /* for tos and net */
- #define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */
- #define ICMP_ECHO 8 /* echo service */
- #define ICMP_TIMXCEED 11 /* time exceeded, code: */
- #define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */
- #define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */
- #define ICMP_PARAMPROB 12 /* ip header bad */
- #define ICMP_TSTAMP 13 /* timestamp request */
- #define ICMP_TSTAMPREPLY 14 /* timestamp reply */
- #define ICMP_IREQ 15 /* information request */
- #define ICMP_IREQREPLY 16 /* information reply */
- #define ICMP_AFREQ 17 /* address format request */
- #define ICMP_AFREPLY 18 /* address format reply */
-
- /* highest known ICMP type code */
- #define ICMP_MAXTYPE 18
-
-
- /*
- * Udp protocol header.
- * Per RFC 768, September, 1981.
- */
- struct udp {
- u_short src; /* source port */
- u_short dst; /* destination port */
- short length; /* udp length */
- u_short checksum; /* udp checksum */
- };
-
-